home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib26b.dsk / BASIC.ASSEMBLER (PATCHED).bas < prev    next >
BASIC Source File  |  2023-02-26  |  12KB  |  279 lines

  1. 10  REM   ********1.9.85********
  2. 20  REM   *   BASIC.ASSEMBLER  *
  3. 30  REM   *  BY  JOHN WHITNEY  *
  4. 40  REM   * COPYRIGHT (C) 1984 *
  5. 50  REM   * BY MICROSPARC, INC *
  6. 60  REM   * LINCOLN, MA. 01773 *
  7. 70  REM   **********************
  8. 80  DATA   ADC,0,109,101,105,125,121,97,113,117,0,0,0
  9. 90  DATA   AND,0,45,37,41,61,57,33,49,53,0,0,0
  10. 100  DATA   ASL,10,14,6,0,30,0,0,0,22,0,0,0
  11. 110  DATA   BCC,0,0,0,0,0,0,0,0,0,0,144,0
  12. 120  DATA   BCS,0,0,0,0,0,0,0,0,0,0,176,0
  13. 130  DATA   BEQ,0,0,0,0,0,0,0,0,0,0,240,0
  14. 140  DATA   BIT,0,44,36,0,0,0,0,0,0,0,0,0
  15. 150  DATA   BMI,0,0,0,0,0,0,0,0,0,0,48,0
  16. 160  DATA   BNE,0,0,0,0,0,0,0,0,0,0,208,0
  17. 170  DATA   BPL,0,0,0,0,0,0,0,0,0,0,16,0
  18. 180  DATA   BRK,0,0,0,0,0,0,0,0,0,0,0,0
  19. 190  DATA   BVC,0,0,0,0,0,0,0,0,0,0,80,0
  20. 200  DATA   BVS,0,0,0,0,0,0,0,0,0,0,112,0
  21. 210  DATA   CLC,24,0,0,0,0,0,0,0,0,0,0,0
  22. 220  DATA   CLD,216,0,0,0,0,0,0,0,0,0,0,0
  23. 230  DATA   CLI,88,0,0,0,0,0,0,0,0,0,0,0
  24. 240  DATA   CLV,184,0,0,0,0,0,0,0,0,0,0,0
  25. 250  DATA   CMP,0,205,197,201,221,217,193,209,213,0,0,0
  26. 260  DATA   CPX,0,236,228,224,0,0,0,0,0,0,0,0
  27. 270  DATA   CPY,0,204,196,192,0,0,0,0,0,0,0,0
  28. 280  DATA   DEC,0,206,198,0,222,0,0,0,214,0,0,0
  29. 290  DATA   DEX,202,0,0,0,0,0,0,0,0,0,0,0
  30. 300  DATA   DEY,136,0,0,0,0,0,0,0,0,0,0,0
  31. 310  DATA   EOR,0,77,69,73,93,89,65,81,85,0,0,0
  32. 320  DATA   INC,0,238,230,0,254,0,0,0,246,0,0,0
  33. 330  DATA   INX,232,0,0,0,0,0,0,0,0,0,0,0
  34. 340  DATA   INY,200,0,0,0,0,0,0,0,0,0,0,0
  35. 350  DATA   JMP,0,76,0,0,0,0,0,0,0,0,0,108
  36. 360  DATA   JSR,0,32,0,0,0,0,0,0,0,0,0,0
  37. 370  DATA   LDA,0,173,165,169,189,185,161,177,181,0,0,0
  38. 380  DATA   LDX,0,174,166,162,0,190,0,0,0,182,0,0
  39. 390  DATA   LDY,0,172,164,160,188,0,0,0,180,0,0,0
  40. 400  DATA   LSR,74,78,70,0,94,0,0,0,86,0,0,0
  41. 410  DATA   NOP,234,0,0,0,0,0,0,0,0,0,0,0
  42. 420  DATA   ORA,0,13,5,9,29,25,1,17,21,0,0,0
  43. 430  DATA   PHA,72,0,0,0,0,0,0,0,0,0,0,0
  44. 440  DATA   PHP,8,0,0,0,0,0,0,0,0,0,0,0
  45. 450  DATA   PLA,104,0,0,0,0,0,0,0,0,0,0,0
  46. 460  DATA   PLP,040,0,0,0,0,0,0,0,0,0,0,0
  47. 470  DATA   ROL,42,46,38,0,62,0,0,0,54,0,0,0
  48. 480  DATA   ROR,106,110,102,0,126,0,0,0,118,0,0,0
  49. 490  DATA   RTI,64,0,0,0,0,0,0,0,0,0,0,0
  50. 500  DATA   RTS,96,0,0,0,0,0,0,0,0,0,0,0
  51. 510  DATA   SBC,0,237,229,233,253,249,225,241,245,0,0,0
  52. 520  DATA   SEC,56,0,0,0,0,0,0,0,0,0,0,0
  53. 530  DATA   SED,248,0,0,0,0,0,0,0,0,0,0,0
  54. 540  DATA   SEI,120,0,0,0,0,0,0,0,0,0,0,0
  55. 550  DATA   STA,0,141,133,0,157,153,129,145,149,0,0,0
  56. 560  DATA   STX,0,142,134,0,0,0,0,0,0,150,0,0
  57. 570  DATA   STY,0,140,132,0,0,0,0,0,148,0,0,0
  58. 580  DATA   TAX,170,0,0,0,0,0,0,0,0,0,0,0
  59. 590  DATA   TAY,168,0,0,0,0,0,0,0,0,0,0,0
  60. 600  DATA   TSX,186,0,0,0,0,0,0,0,0,0,0,0
  61. 610  DATA   TXA,138,0,0,0,0,0,0,0,0,0,0,0
  62. 620  DATA   TXS,154,0,0,0,0,0,0,0,0,0,0,0
  63. 630  DATA   TYA,152,0,0,0,0,0,0,0,0,0,0,0
  64. 640  HOME : VTAB 22: PRINT "** COPYRIGHT 1984 BY MICROSPARC, INC. **"
  65. 650  VTAB 3: INVERSE : PRINT "BASIC ASSEMBLER": NORMAL : PRINT 
  66. 660  GOSUB 2350
  67. 670  CALL  -958
  68. 680 SA = 31308: REM   STARTING ADDRESS FOR ASSEMBLY 
  69. 690  HIMEM: SA -1100
  70. 700 D$ =  CHR$(4): VTAB 7: CALL  -958: INPUT "SOURCE FILE TO LOAD: ";PR$: IF  LEN(PR$) = 0  OR  LEN(PR$) >15  OR  VAL(PR$) >0  THEN 700
  71. 710  ONERR  GOTO 730
  72. 720  PRINT D$"VERIFY";PR$: PRINT D$"OPEN";PR$: PRINT D$"READ";PR$: POKE 216,0: GOTO 740
  73. 730  POKE 216,0: PRINT  CHR$(7)"THAT FILE IS NOT ON THIS DISK.": PRINT "PRESS ANY KEY TO CONTINUE.": GET K$: PRINT : GOTO 700
  74. 740  INPUT IN$: IF  MID$ (IN$,10,3) = "EOF"  THEN  PRINT D$"CLOSE": GOTO 780
  75. 750 NI = NI +1
  76. 760  IF  LEFT$(IN$,8) < >"        "  THEN NL = NL +1
  77. 770  GOTO 740
  78. 780  DIM OP(56,12),OP$(56)
  79. 790  DIM IN$(NI),MD(NI),LB$(NI),TP$(NI),LN(NI),LO(NI +1)
  80. 800  DIM LF$(NL),AF(NL),LR$(NL),DR(NL)
  81. 810  RESTORE 
  82. 820  VTAB 12: CALL  -958: PRINT "FIRST PASS:"
  83. 830  PRINT D$"OPEN"PR$: PRINT D$"READ "PR$
  84. 840  INPUT LA$: IF  MID$ (LA$,10,3) < >"ORG"  OR  LEN(LA$) <14  THEN  PRINT : PRINT D$"CLOSE "PR$: PRINT  CHR$(7): PRINT "SOURCE CODE MUST BEGIN WITH 'ORG'": GOTO 2270
  85. 850 N = 1:HX$ =  MID$ (LA$,14): IF  LEFT$(HX$,1) = "$"  THEN  GOSUB 2580:LA = DT: GOTO 870
  86. 860 LA =  VAL(HX$)
  87. 870  FOR N = 2 TO NI
  88. 880  INPUT IN$
  89. 890  IF  LEN(IN$) >14  THEN HX$ =  MID$ (IN$,14): GOSUB 2580:IN$ =  LEFT$(IN$,13) +HX$
  90. 900  VTAB 12: HTAB 13: PRINT N
  91. 910 IN$ =  LEFT$(IN$ +"                                         ",41)
  92. 920  REM   THE ABOVE STATEMENT HAS 41 SPACES BETWEEN THE QUOTES
  93. 930  IF  LEFT$(IN$,8) < >"        "  THEN  GOSUB 1110
  94. 940  GOSUB 1280
  95. 950  NEXT 
  96. 960  PRINT D$"CLOSE "PR$
  97. 970 LO(NI +1) = AD
  98. 980  GOSUB 1690
  99. 990  VTAB 14: CALL  -958: PRINT "SECOND PASS:"
  100. 1000  FOR N = 2 TO NI
  101. 1010  VTAB 14: HTAB 13: PRINT N
  102. 1020  GOSUB 1750
  103. 1030  NEXT 
  104. 1040  PRINT : PRINT "ASSEMBLY COMPLETE": PRINT :L = LO(N -1) +LN(N -1)
  105. 1050  IF LA +L <38400  AND ( PEEK(109) + PEEK(110) *256) <(LA)  THEN 1090
  106. 1060  IF LA +L <38400  AND LA +L >2049  THEN  PRINT "OBJECT CODE MAY OVERLAP BASIC ASSEMBLER": GOTO 1090
  107. 1070  IF LA <2049  THEN 1090
  108. 1080  PRINT "OBJECT CODE OVERLAPS DOS. YOU MUST": PRINT "RE-LOCATE IT FROM THE PRESENT LOCATION": PRINT "ADDRESS: ";SA: PRINT "LENGTH: ";L: END 
  109. 1090  PRINT "SAVING ";PR$;".OBJ,A";LA;",L";L: PRINT D$"OPEN B.A.TEMP": PRINT D$"CLOSE": PRINT D$"DELETE B.A.TEMP": PRINT D$"OPEN B.A.TEMP": PRINT D$"WRITE B.A.TEMP": PRINT "BSAVE ";PR$;".OBJ,A";SA;",L";L
  110. 1100  PRINT "BLOAD ";PR$;".OBJ,A"LA: PRINT "BSAVE ";PR$;".OBJ,A";LA;",L";L: PRINT D$"CLOSE": PRINT D$"EXEC B.A.TEMP": END 
  111. 1110  REM   PROCESS LABELS
  112. 1120  FOR P = 1 TO 8
  113. 1130  IF  MID$ (IN$,P,1) = " "  THEN 1150
  114. 1140  NEXT 
  115. 1150 P = P -1
  116. 1160  IF  MID$ (IN$,10,3) < >"EQU"  THEN 1240
  117. 1170 NF = NF +1
  118. 1180 LF$(NF) =  LEFT$(IN$,P)
  119. 1190 AF(NF) =  VAL( MID$ (IN$,14, LEN(IN$) -13))
  120. 1200 XL =  LEN( STR$(AF(NF))) +14
  121. 1210  IF XL > =  LEN(IN$)  THEN 1270
  122. 1220  IF  MID$ (IN$,XL,1) = "!"  THEN XA = AF(NF): GOSUB 2500
  123. 1230  GOTO 1270
  124. 1240 NR = NR +1
  125. 1250 LR$(NR) =  LEFT$(IN$,P)
  126. 1260 DR(NR) = AD +LA
  127. 1270  RETURN 
  128. 1280  REM   PROCESS LENGTH
  129. 1290 P = 14
  130. 1300 IN$(N) =  MID$ (IN$,10,3)
  131. 1310 LO(N) = AD
  132. 1320  IF IN$(N) = "EQU"  THEN 1680
  133. 1330  IF IN$(N) = "DRS"  THEN LN(N) =  VAL( MID$ (IN$,14)): GOSUB 2300: GOTO 1670
  134. 1340  IF  MID$ (IN$,14,1) = " "  THEN MD(N) = 1: GOTO 1460
  135. 1350 P = 15
  136. 1360  IF  MID$ (IN$,P,1) < >" "  AND  MID$ (IN$,P,1) < >","  AND  MID$ (IN$,P,1) < >")"  THEN P = P +1: GOTO 1360
  137. 1366  IF IN$(N) = "DFB"  THEN LB$(N) =  MID$ (IN$,14,P -14):LN(N) = 1: GOTO 1670
  138. 1370  IF  MID$ (IN$,P,3) = ",X "  THEN MD(N) = 5: GOTO 1460
  139. 1380  IF  MID$ (IN$,P,3) = ",Y "  THEN MD(N) = 6: GOTO 1460
  140. 1390  IF  MID$ (IN$,P,3) = ",X)"  THEN MD(N) = 7: GOTO 1460
  141. 1400  IF  MID$ (IN$,P,3) = ")  "  THEN MD(N) = 12: GOTO 1460
  142. 1410  IF  MID$ (IN$,P,3) = "),Y"  THEN MD(N) = 8: GOTO 1460
  143. 1420  IF  MID$ (IN$,14,1) = "#"  THEN MD(N) = 4: GOTO 1460
  144. 1430  IF  MID$ (IN$,14,1) = "<"  THEN MD(N) = 13: GOTO 1460
  145. 1440  IF  MID$ (IN$,14,1) = ">"  THEN MD(N) = 14: GOTO 1460
  146. 1450 MD(N) = 2
  147. 1460  IF  MID$ (IN$,10,1) = "B"  AND  MID$ (IN$,10,3) < >"BIT"  AND  MID$ (IN$,10,3) < >"BRK"  THEN MD(N) = 11:LB$(N) =  MID$ (IN$,14,P -14):TP$(N) = "R": GOTO 1640
  148. 1470  IF MD(N) = 4  THEN LB$(N) =  MID$ (IN$,15,P -15):TP$(N) = "F": GOTO 1660
  149. 1480  IF MD(N) = 13  OR MD(N) = 14  THEN LB$(N) =  MID$ (IN$,15,P -15): GOTO 1520
  150. 1490  IF MD(N) = 7  OR MD(N) = 8  OR MD(N) = 12  THEN LB$(N) =  MID$ (IN$,15,P -15): GOTO 1520
  151. 1500 LB$(N) =  MID$ (IN$,14,P -14)
  152. 1510  IF MD(N) = 1  THEN TP$(N) = "F": GOTO 1640
  153. 1520  FOR I = 1 TO NF
  154. 1530  IF LF$(I) = LB$(N)  THEN TP$(N) = "F":LB$(N) =  STR$(AF(I)): GOTO 1600
  155. 1540  NEXT 
  156. 1550  FOR I = 1 TO NR
  157. 1560  IF LR$(I) = LB$(N)  THEN TP$(N) = "D":LB$(N) =  STR$(DR(I)): GOTO 1600
  158. 1570  NEXT 
  159. 1580 TP$(N) = "U": FOR Z = 1 TO NF: IF  LEN(LF$(Z)) < LEN(LB$(N))  THEN  IF LF$(Z) =  LEFT$(LB$(N), LEN(LF$(Z)))  THEN  IF AF(Z) <256  THEN 1610
  160. 1590  NEXT 
  161. 1600  IF TP$(N) < >"F"  OR AF(I) > = 256  THEN 1640
  162. 1610  IF MD(N) = 2  AND IN$(N) < >"JMP"  AND IN$(N) < >"JSR"  THEN MD(N) = 3
  163. 1620  IF MD(N) = 5  THEN MD(N) = 9
  164. 1630  IF MD(N) = 6  AND (IN$(N) = "LDX"  OR IN$(N) = "STX")  THEN MD(N) = 10
  165. 1640  IF MD(N) = 1  THEN LN(N) = 1: GOTO 1670
  166. 1650  IF MD(N) = 2  OR MD(N) = 5  OR MD(N) = 6  OR MD(N) = 12  THEN LN(N) = 3: GOTO 1670
  167. 1660 LN(N) = 2
  168. 1670 AD = AD +LN(N)
  169. 1680  RETURN 
  170. 1690  REM   BUILD OP CODE TABLE
  171. 1700  VTAB 13: FLASH : PRINT "              ";
  172. 1710  FOR N = 1 TO 56: READ OP$(N): FOR I = 1 TO 12: READ OP(N,I): NEXT : NEXT 
  173. 1720  PRINT 
  174. 1730  VTAB 13: INVERSE : PRINT "              ": NORMAL 
  175. 1740  RETURN 
  176. 1750  REM   FIND OP CODE
  177. 1760  IF IN$(N) = "DRS"  OR IN$(N) = "EQU"  THEN 2190
  178. 1763  IF IN$(N) = "DFB" GOTO 10590
  179. 1770  FOR I = 1 TO 56
  180. 1780  IF OP$(I) = IN$(N)  THEN 1820
  181. 1790  NEXT 
  182. 1800  PRINT "INVALID INSTRUCTION ==> (# "N")"
  183. 1810  GOTO 2200
  184. 1820  IF (MD(N) = 13  OR MD(N) = 14)  AND OP(I,4) < >0  THEN 1870
  185. 1830  IF OP(I,MD(N)) < >0  THEN 1870
  186. 1840  IF IN$(N) = "BRK"  AND MD(N) = 1  THEN 1870
  187. 1850  PRINT "INVALID ADDRESS MODE ==> (# "N")"
  188. 1860  GOTO 2200
  189. 1870  IF TP$(N) < >"U"  AND TP$(N) < >"R"  THEN 2010
  190. 1880  FOR P = 2 TO  LEN(LB$(N))
  191. 1890  IF  MID$ (LB$(N),P,1) = "+"  OR  MID$ (LB$(N),P,1) = "-"  THEN 1920
  192. 1900  NEXT 
  193. 1910 P = P +1
  194. 1920  IF TP$(N) = "R"  THEN 2020
  195. 1930  FOR J = 1 TO NF
  196. 1940  IF LF$(J) =  LEFT$(LB$(N),P -1)  THEN TP$(N) = "F":LB$(N) =  STR$(AF(J) + VAL( MID$ (LB$(N),P))): GOTO 2080
  197. 1950  NEXT 
  198. 1960  FOR J = 1 TO NR
  199. 1970  IF LR$(J) =  LEFT$(LB$(N),P -1)  THEN TP$(N) = "D":LB$(N) =  STR$(DR(J) + VAL( MID$ (LB$(N),P))): GOTO 2080
  200. 1980  NEXT 
  201. 1990  PRINT "INVALID LABEL ==> (# "N")"
  202. 2000  GOTO 2200
  203. 2010  IF TP$(N) < >"R"  THEN 2080
  204. 2020  FOR J = 1 TO NR
  205. 2030  IF LR$(J) =  LEFT$(LB$(N),P -1)  THEN LB$(N) =  STR$(DR(J)) + MID$ (LB$(N),P): GOTO 2060
  206. 2040  NEXT 
  207. 2050  GOTO 1990
  208. 2060 LB$(N) =  STR$( VAL(LB$(N)) -(LO(N +1) +LA))
  209. 2070  IF  VAL(LB$(N)) >127  OR  VAL(LB$(N)) < -128  THEN  PRINT "INVALID RELATIVE ADDRESS ==> (# "N")": PRINT "= "LB$(N): GOTO 2200
  210. 2080  IF MD(N) = 13  THEN  POKE LO(N) +SA,OP(I,4):LB$(N) =  STR$( INT( VAL(LB$(N))/256)): GOTO 2120
  211. 2090  IF MD(N) = 14  THEN  POKE LO(N) +SA,OP(I,4):LB$(N) =  STR$( VAL(LB$(N)) -(256 * INT( VAL(LB$(N))/256))): GOTO 2120
  212. 2100  POKE LO(N) +SA,OP(I,MD(N))
  213. 2110  IF LN(N) = 1  THEN 2190
  214. 2120  IF LN(N) = 2  AND  VAL(LB$(N)) >255  THEN  PRINT "INVALID LENGTH, > 255 ==> (# "N")": GOTO 2200
  215. 2130  IF  VAL(LB$(N)) > = 0  THEN 2160
  216. 2140 LB = 256 + VAL(LB$(N))
  217. 2150 LB$(N) =  STR$(LB)
  218. 2160  IF LN(N) = 2  THEN  POKE LO(N) +SA +1, VAL(LB$(N)): GOTO 2190
  219. 2170  POKE LO(N) +SA +2, VAL(LB$(N))/256
  220. 2180  POKE LO(N) +SA +1, VAL(LB$(N)) -(256 * PEEK(LO(N) +SA +2))
  221. 2190  RETURN 
  222. 2200  REM   FIND STATEMENT FOR ERROR
  223. 2210  PRINT D$"OPEN "PR$: PRINT D$"READ "PR$
  224. 2220  FOR X = 1 TO N
  225. 2230  INPUT IN$
  226. 2240  NEXT 
  227. 2250  PRINT D$"CLOSE "PR$
  228. 2260  PRINT IN$
  229. 2270  VTAB 22: CALL  -958: INPUT "DO YOU WISH TO EDIT THE FILE? (Y/N)";K$: IF K$ = "Y"  THEN  PRINT D$"RUN SOURCE.EDITOR"
  230. 2280  IF K$ = "N"  THEN  HOME : END 
  231. 2290  PRINT  CHR$(7): GOTO 2270
  232. 2300  REM    CHECK DRS FOR CONSTANTS
  233. 2310 XL =  LEN( STR$(LN(N))) +14
  234. 2320  IF XL > =  LEN(IN$)  THEN  RETURN 
  235. 2330  IF  MID$ (IN$,XL,1) = "!"  THEN XA = LO(N) +SA: GOSUB 2500
  236. 2340  RETURN 
  237. 2350  DIM PN(15)
  238. 2360 PN(1) = 66:PN(2) = 89:PN(3) = 32
  239. 2370 PN(4) = 74:PN(5) = 79:PN(6) = 72
  240. 2380 PN(7) = 78:PN(8) = 32:PN(9) = 87
  241. 2390 PN(10) = 72:PN(11) = 73:PN(12) = 84
  242. 2400 PN(13) = 78:PN(14) = 69:PN(15) = 89
  243. 2410  FOR VN = 1 TO 15
  244. 2420  VTAB 5
  245. 2430  FOR VO = VN TO 1  STEP  -1
  246. 2440  PRINT  CHR$(PN(16 -VO));
  247. 2450  NEXT VO
  248. 2460  PRINT 
  249. 2470  NEXT VN
  250. 2480  PRINT 
  251. 2490  RETURN 
  252. 2500  REM    INSTALL CONSTANTS
  253. 2510 XL = XL +1
  254. 2520  IF XL > LEN(IN$)  THEN  RETURN 
  255. 2530  IF  MID$ (IN$,XL,1) = "!"  THEN  RETURN 
  256. 2540  POKE XA, ASC( MID$ (IN$,XL,1))
  257. 2550 XA = XA +1
  258. 2560  GOTO 2500
  259. 2570  REM  HEX CONVERSION
  260. 2580 HF = 0:DT = 0
  261. 2590  FOR K = 1 TO  LEN(HX$)
  262. 2600  IF  MID$ (HX$,K,1) = "$"  THEN HV$ =  MID$ (HX$,K): IF  LEN(HV$) >1  THEN HV$ =  MID$ (HV$,2): GOTO 2620
  263. 2610  NEXT K: RETURN 
  264. 2620  IF  LEN(HV$) <4  THEN  PRINT D$"CLOSE": PRINT "OPERAND ERROR IN LINE:";N: GOTO 2260
  265. 2630  FOR K1 = 1 TO 4
  266. 2640 HD =  ASC( MID$ (HV$,K1,1))
  267. 2650 HD = HD -48: IF HD >9  THEN HD = HD -7: IF HD > = 10  AND HD < = 15  THEN 2680
  268. 2660  IF HD > = 0  AND HD < = 9  THEN 2680
  269. 2670  PRINT D$"CLOSE": PRINT "OPERAND ERROR IN LINE:";N: GOTO 2260
  270. 2680 DT = DT +HD *(16 ^(4 -K1))
  271. 2690  NEXT 
  272. 2700  IF K >1  THEN HX$ =  LEFT$(HX$,K -1) + STR$(DT) + MID$ (HX$,K +5): GOTO 2720
  273. 2710 HX$ =  STR$(DT) + MID$ (HX$,6)
  274. 2720  RETURN 
  275. 10560 :
  276. 10570 : REM  HANDLE DFB
  277. 10580 :
  278. 10590  IF  VAL(LB$(N)) <0  OR  VAL(LB$(N)) <0  OR  VAL(LB$(N)) >255  THEN  PRINT "INVALID OPERAND ==> (# "N")": GOTO 2200
  279. 10600  POKE LO(N) +SA, VAL(LB$(N)): GOTO 2190